import { getCurrentInstance } from 'vue'

/**
 * 获取元素高度
 * @param {*} selector 选择器
 * @param {*} instance 组件实例
 * @returns
 */
export const selectorRectInfo = (selector, instance) => {
  //使用 uni.createSelectorQuery( )返回 null 则需要在后面加上 .in(instance)
  // 获取组件实例
  const currentInstance = getCurrentInstance()
  const isInstance = instance ? instance : currentInstance
  const query = uni.createSelectorQuery().in(isInstance)

  return new Promise((resolve, reject) => {
    query
      .select(selector)
      .boundingClientRect((res) => {
        resolve(res)
      })
      .exec()
  })
}

/**
 * 获取 [min,max]的随机数
 * Math.floor(Math.random()*10) 可均衡获取 0 到 9 的随机整数
 * @param min
 * @param max
 */
export const getRandomNumber = (min, max) => {
  return Math.floor(Math.random() * (max - min + 1) + min) ?? 0
}

/**
 * 转换数字为以万为单位
 * @param {*} num
 * @returns
 */
export const formatMillion = (num) => {
  const million = num / 10000 // 转换为以万为单位

  return `${million.toFixed(2)}万` // 保留两位小数，并添加“万”字样
}

/**
 * 返回格式为`00:00`的时间
 * @param {Number} milliSeconds 毫秒时间
 * @returns {String} 00:00
 */
export const readableTime = (milliSeconds = 0) => {
  const hourTime = 60 * 60 * 1000
  if (milliSeconds > hourTime) {
    return '00 : 00'
  }
  const relative = new Date(milliSeconds * 1000)
  const M = relative.getMinutes()
  const S = relative.getSeconds()

  return [M, S].map((t) => ('0' + t).slice(-2)).join(':')
}

/**
 * 根据数组对象的某个字段去重
 * item.name  是[{name:1}] 根据每条数据的name值来去重
 * 使用方法：第一个参数是数组，第二个参数是你要根据哪个字段来去重
 * unique(arr,'name')
 * */
export const unique = (arr, val) => {
  const res = new Map()
  return arr.filter((item) => !res.has(item[val]) && res.set(item[val], 1))
}

/**
 * 获取歌曲所在位置索引
 * @param {*} arr
 * @param {*} id
 * @returns
 */
export const getIndex = (arr, id) => {
  return arr.findIndex((item) => item.id === id)
}

/**
 * 设置值
 * @param {*} value *
 */
export const setValue = (data = { target, value }) => {
  if (Array.isArray(data)) {
    data.forEach((item) => {
      item.target.value = item.value
    })
  } else {
    data.target.value = data.value
  }
}

/**
 * 路由跳转
 * @param {*} url 地址
 * @param {*} params 参数
 */
export const route = (url, params) => {
  uni.$u.route(url, params)
}

/**
 * 获取当前页面栈的实例
 * @returns page
 */
export const currentPage = () => {
  const pages = getCurrentPages()
  const page = pages[pages.length - 1]

  return page
}

/**
 * 清除标签
 * @param {*} str
 * @returns
 */
export const removeHTMLTags = (str) => {
  return str.replace(/<[^>]*>/g, '')
}
